home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / obero / oberon_lib.lha / oberon-a / source1.lha / source / Amiga / Locale.mod < prev    next >
Text File  |  1994-08-08  |  15KB  |  476 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: Locale.mod $
  4.   Description: Interface to locale.library
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 3.1 $
  8.       $Author: fjc $
  9.         $Date: 1994/08/08 01:19:07 $
  10.  
  11.   Includes Release 40.15
  12.  
  13.   (C) Copyright 1991-1993 Commodore-Amiga, Inc.
  14.       All Rights Reserved
  15.  
  16.   Oberon-A Interface Copyright © 1994, Frank Copeland.
  17.   This file is part of the Oberon-A Interface.
  18.   See Oberon-A.doc for conditions of use and distribution.
  19.  
  20.   Log entries are at the end of the file.
  21.  
  22. *************************************************************************)
  23.  
  24. MODULE Locale;
  25.  
  26. (*
  27. ** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
  28. ** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
  29. ** $V- OvflChk       $Z- ZeroVars
  30. *)
  31.  
  32. IMPORT
  33.   E   := Exec,
  34.   U   := Utility,
  35.   D   := Dos,
  36.   Rx  := Rexx,
  37.   SYS := SYSTEM;
  38.  
  39. (*
  40. **      $VER: locale.h 38.12 (24.2.93)
  41. **
  42. **      locale.library interface structures and definitions
  43. *)
  44.  
  45. (*****************************************************************************)
  46.  
  47. CONST
  48.  
  49. (* constants for GetLocaleStr() *)
  50.   day1 * = 1;           (* Sunday    *)
  51.   day2 * = 2;           (* Monday    *)
  52.   day3 * = 3;           (* Tuesday   *)
  53.   day4 * = 4;           (* Wednesday *)
  54.   day5 * = 5;           (* Thursday  *)
  55.   day6 * = 6;           (* Friday    *)
  56.   day7 * = 7;           (* Saturday  *)
  57.  
  58.   abday1 * = 8;         (* Sun *)
  59.   abday2 * = 9;         (* Mon *)
  60.   abday3 * = 10;        (* Tue *)
  61.   abday4 * = 11;        (* Wed *)
  62.   abday5 * = 12;        (* Thu *)
  63.   abday6 * = 13;        (* Fri *)
  64.   abday7 * = 14;        (* Sat *)
  65.  
  66.   mon1 * = 15;          (* January   *)
  67.   mon2 * = 16;          (* February  *)
  68.   mon3 * = 17;          (* March     *)
  69.   mon4 * = 18;          (* April     *)
  70.   mon5 * = 19;          (* May       *)
  71.   mon6 * = 20;          (* June      *)
  72.   mon7 * = 21;          (* July      *)
  73.   mon8 * = 22;          (* August    *)
  74.   mon9 * = 23;          (* September *)
  75.   mon10 * = 24;         (* October   *)
  76.   mon11 * = 25;         (* November  *)
  77.   mon12 * = 26;         (* December  *)
  78.  
  79.   abmon1 * = 27;        (* Jan *)
  80.   abmon2 * = 28;        (* Feb *)
  81.   abmon3 * = 29;        (* Mar *)
  82.   abmon4 * = 30;        (* Apr *)
  83.   abmon5 * = 31;        (* May *)
  84.   abmon6 * = 32;        (* Jun *)
  85.   abmon7 * = 33;        (* Jul *)
  86.   abmon8 * = 34;        (* Aug *)
  87.   abmon9 * = 35;        (* Sep *)
  88.   abmon10 * = 36;       (* Oct *)
  89.   abmon11 * = 37;       (* Nov *)
  90.   abmon12 * = 38;       (* Dec *)
  91.  
  92.   yesStr * = 39;        (* affirmative response for yes/no queries *)
  93.   noStr * = 40;         (* negative response for yes/no queries    *)
  94.  
  95.   amStr * = 41;         (* AM *)
  96.   pmStr * = 42;         (* PM *)
  97.  
  98.   softHyphen * = 43;    (* soft hyphenation *)
  99.   hardHyphen * = 44;    (* hard hyphenation *)
  100.  
  101.   openQuote * = 45;     (* start of quoted block *)
  102.   closeQuote * = 46;    (* end of quoted block   *)
  103.  
  104.   yesterdayStr * = 47;  (* Yesterday *)
  105.   todayStr * = 48;      (* Today     *)
  106.   tomorrowStr * = 49;   (* Tomorrow  *)
  107.   futureStr * = 50;     (* Future    *)
  108.  
  109.   maxStrMsg * = 51;     (* current number of defined strings *)
  110.  
  111.  
  112. (*****************************************************************************)
  113.  
  114. TYPE
  115.  
  116. (* OpenLibrary("locale.library",0) returns a pointer to this structure *)
  117.   LocaleBasePtr* = CPOINTER TO LocaleBase;
  118.   LocaleBase * = RECORD (E.Library)
  119.     sysPatches * : E.BOOL;     (* TRUE if locale installed its patches *)
  120.   END;
  121.  
  122.  
  123. (*****************************************************************************)
  124.  
  125. TYPE
  126.  
  127. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  128.  
  129.   LocalePtr * = CPOINTER TO Locale;
  130.   Locale * = RECORD
  131.     localeName -       : E.STRPTR;    (* locale's name               *)
  132.     languageName -     : E.STRPTR;    (* language of this locale     *)
  133.     prefLanguages -    : ARRAY 10 OF E.STRPTR; (* preferred languages*)
  134.     flags -            : E.ULONG;     (* always 0 for now            *)
  135.  
  136.     codeSet -          : E.ULONG;     (* always 0 for now            *)
  137.     countryCode -      : E.ULONG;     (* user's country code         *)
  138.     telephoneCode -    : E.ULONG;     (* country's telephone code    *)
  139.     gmtOffset -        : LONGINT;     (* minutes from GMT            *)
  140.     measuringSystem -  : E.UBYTE;     (* what measuring system?      *)
  141.     calendarType -     : E.UBYTE;     (* what calendar type?         *)
  142.     reserved0 -        : ARRAY 2 OF E.UBYTE;
  143.  
  144.     dateTimeFormat -   : E.STRPTR;    (* regular date & time format  *)
  145.     dateFormat -       : E.STRPTR;    (* date format by itself       *)
  146.     timeFormat -       : E.STRPTR;    (* time format by itself       *)
  147.  
  148.     shortDateTimeFormat - : E.STRPTR; (* short date & time format    *)
  149.     shortDateFormat -  : E.STRPTR;    (* short date format by itself *)
  150.     shortTimeFormat -  : E.STRPTR;    (* short time format by itself *)
  151.  
  152.     (* for numeric values *)
  153.     decimalPoint -     : E.STRPTR;    (* character before the decimals *)
  154.     groupSeparator -   : E.STRPTR;    (* separates groups of digits    *)
  155.     fracGroupSeparator - : E.STRPTR;  (* separates groups of digits    *)
  156.     grouping -         : E.APTR;      (* size of each group            *)
  157.     fracGrouping -     : E.APTR;      (* size of each group            *)
  158.  
  159.     (* for monetary values *)
  160.     monDecimalPoint -  : E.STRPTR;
  161.     monGroupSeparator - : E.STRPTR;
  162.     monFracGroupSeparator - : E.STRPTR;
  163.     monGrouping -      : E.APTR;
  164.     monFracGrouping -  : E.APTR;
  165.     monFracDigits -    : E.UBYTE;     (* digits after the decimal point   *)
  166.     monIntFracDigits - : E.UBYTE;     (* for international representation *)
  167.     reserved1 -        : ARRAY 2 OF E.UBYTE;
  168.  
  169.     (* for currency symbols *)
  170.     monCS -            : E.STRPTR;    (* currency symbol              *)
  171.     monSmallCS -       : E.STRPTR;    (* symbol for small amounts     *)
  172.     monIntCS -         : E.STRPTR;    (* internationl (ISO 4217) code *)
  173.  
  174.     (* for positive monetary values *)
  175.     monPositiveSign -  : E.STRPTR;    (* indicate positive money value   *)
  176.     monPositiveSpaceSep - : E.UBYTE;  (* determine if separated by space *)
  177.     monPositiveSignPos - : E.UBYTE;   (* position of positive sign       *)
  178.     monPositiveCSPos - : E.UBYTE;     (* position of currency symbol     *)
  179.     reserved2 -        : E.UBYTE;
  180.  
  181.     (* for negative monetary values *)
  182.     monNegativeSign -  : E.STRPTR;    (* indicate negative money value   *)
  183.     monNegativeSpaceSep - : E.UBYTE;  (* determine if separated by space *)
  184.     monNegativeSignPos - : E.UBYTE;   (* position of negative sign       *)
  185.     monNegativeCSPos - : E.UBYTE;     (* position of currency symbol     *)
  186.     reserved3 -        : E.UBYTE;
  187.   END;
  188.  
  189. CONST
  190.  
  191. (* constants for Locale.loc_MeasuringSystem *)
  192.   msISO *      = 0;             (* international metric system *)
  193.   msAmerican * = 1;             (* american system             *)
  194.   msImperial * = 2;             (* imperial system             *)
  195.   msBritish *  = 3;             (* british system              *)
  196.  
  197. (* constants for Locale.loc_CalendarType *)
  198.   ct7Sun * = 0;      (* 7 days a week, Sunday is the first day    *)
  199.   ct7Mon * = 1;      (* 7 days a week, Monday is the first day    *)
  200.   ct7Tue * = 2;      (* 7 days a week, Tuesday is the first day   *)
  201.   ct7Wed * = 3;      (* 7 days a week, Wednesday is the first day *)
  202.   ct7Thu * = 4;      (* 7 days a week, Thursday is the first day  *)
  203.   ct7Fri * = 5;      (* 7 days a week, Friday is the first day    *)
  204.   ct7Sat * = 6;      (* 7 days a week, Saturday is the first day  *)
  205.  
  206. (* constants for Locale.loc_MonPositiveSpaceSep and Locale.loc_MonNegativeSpaceSep *)
  207.   ssNoSpace * = 0; (* cur. symbol is NOT separated from value with a space *)
  208.   ssSpace *   = 1; (* cur. symbol IS separated from value with a space     *)
  209.  
  210. (* constants for Locale.loc_MonPositiveSignPos and Locale.loc_MonNegativeSignPos *)
  211.   spParens *   = 0;     (* () surround the quantity and currency_symbol   *)
  212.   spPrecAll *  = 1;     (* sign string comes before amount and symbol     *)
  213.   spSuccAll *  = 2;     (* sign string comes after amount and symbol      *)
  214.   spPrecCurr * = 3;     (* sign string comes right before currency symbol *)
  215.   spSuccCurr * = 4;     (* sign string comes right after currency symbol  *)
  216.  
  217. (* constants for Locale.loc_MonPositiveCSPos and Locale.loc_MonNegativeCSPos *)
  218.   cspPrecedes * = 0;    (* currency symbol comes before value *)
  219.   cspSucceeds * = 1;    (* currency symbol comes after value  *)
  220.  
  221. (* elements of the byte arrays pointed to by:
  222.  *   Locale.loc_Grouping
  223.  *   Locale.loc_FracGrouping
  224.  *   Locale.loc_MonGrouping
  225.  *   Locale.loc_MonFracGrouping
  226.  * are interpreted as follows:
  227.  *
  228.  *    255     indicates that no further grouping is to be performed
  229.  *    0       indicates that the previous element is to be repeatedly used
  230.  *            for the remainder of the digits
  231.  *    <other> the number of digits that comprises the current group
  232.  *)
  233.  
  234.  
  235. (*****************************************************************************)
  236.  
  237. CONST
  238.  
  239. (* Tags for OpenCatalog() *)
  240.   ocTagBase *         = U.tagUser + 090000H;
  241.   ocBuiltInLanguage * = ocTagBase+1; (* language of built-in strings    *)
  242.   ocBuiltInCodeSet *  = ocTagBase+2; (* code set of built-in strings    *)
  243.   ocVersion *         = ocTagBase+3; (* catalog version number required *)
  244.   ocLanguage *        = ocTagBase+4; (* preferred language of catalog   *)
  245.  
  246.  
  247. (*****************************************************************************)
  248.  
  249. CONST
  250.  
  251. (* Comparison types for StrnCmp() *)
  252.   scAscii * = 0;
  253.   scCollate1 * = 1;
  254.   scCollate2 * = 2;
  255.  
  256.  
  257. (*****************************************************************************)
  258.  
  259. TYPE
  260.  
  261. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  262.   CatalogPtr * = CPOINTER TO Catalog;
  263.   Catalog * = RECORD (E.Node) (* for internal linkage    *)
  264.     pad -      : E.UWORD;     (* to longword align       *)
  265.     language - : E.STRPTR;    (* language of the catalog *)
  266.     codeSet -  : E.ULONG;     (* currently always 0      *)
  267.     version -  : E.UWORD;     (* version of the catalog  *)
  268.     revision - : E.UWORD;     (* revision of the catalog *)
  269.   END;
  270.  
  271.  
  272. (*-- Library Base variable --------------------------------------------*)
  273.  
  274. CONST
  275.  
  276.   name * = "locale.library";
  277.  
  278. VAR
  279.  
  280.   base* : LocaleBasePtr;
  281.  
  282.  
  283. (*-- Library Functions ------------------------------------------------*)
  284.  
  285. (*
  286. **      $VER: locale_protos.h 38.5 (18.6.93)
  287. *)
  288.  
  289. (*--- functions in V38 or higher (Release 2.1) ---*)
  290. LIBCALL (base : LocaleBasePtr) CloseCatalog *
  291.   ( catalog [8] : CatalogPtr );
  292.   -36;
  293.  
  294. LIBCALL (base : LocaleBasePtr) CloseLocale *
  295.   ( locale [8] : LocalePtr );
  296.   -42;
  297.  
  298. LIBCALL (base : LocaleBasePtr) ConvToLower *
  299.   ( locale    [8] : LocalePtr;
  300.     character [0] : E.ULONG )
  301.   : E.ULONG;
  302.   -48;
  303.  
  304. LIBCALL (base : LocaleBasePtr) ConvToUpper *
  305.   ( locale    [8] : LocalePtr;
  306.     character [0] : E.ULONG )
  307.   : E.ULONG;
  308.   -54;
  309.  
  310. LIBCALL (base : LocaleBasePtr) FormatDate *
  311.   ( locale       [8] : LocalePtr;
  312.     fmtTemplate  [9] : ARRAY OF CHAR;
  313.     VAR date    [10] : D.Date;
  314.     putCharFunc [11] : U.HookPtr );
  315.   -60;
  316.  
  317. LIBCALL (base : LocaleBasePtr) FormatString *
  318.   ( locale       [8] : LocalePtr;
  319.     fmtTemplate  [9] : ARRAY OF CHAR;
  320.     dataStream  [10] : E.APTR;
  321.     putCharFunc [11] : U.HookPtr )
  322.   : E.APTR;
  323.   -66;
  324.  
  325. LIBCALL (base : LocaleBasePtr) GetCatalogStr *
  326.   ( catalog       [8] : CatalogPtr;
  327.     stringNum     [0] : LONGINT;
  328.     defaultString [9] : ARRAY OF CHAR )
  329.   : E.STRPTR;
  330.   -72;
  331.  
  332. LIBCALL (base : LocaleBasePtr) GetLocaleStr *
  333.   ( locale    [8] : LocalePtr;
  334.     stringNum [0] : E.ULONG )
  335.   : E.STRPTR;
  336.   -78;
  337.  
  338. LIBCALL (base : LocaleBasePtr) IsAlNum *
  339.   ( locale    [8] : LocalePtr;
  340.     character [0] : E.ULONG )
  341.   : BOOLEAN;
  342.   -84;
  343.  
  344. LIBCALL (base : LocaleBasePtr) IsAlpha *
  345.   ( locale    [8] : LocalePtr;
  346.     character [0] : E.ULONG )
  347.   : BOOLEAN;
  348.   -90;
  349.  
  350. LIBCALL (base : LocaleBasePtr) IsCntrl *
  351.   ( locale    [8] : LocalePtr;
  352.     character [0] : E.ULONG )
  353.   : BOOLEAN;
  354.   -96;
  355.  
  356. LIBCALL (base : LocaleBasePtr) IsDigit *
  357.   ( locale    [8] : LocalePtr;
  358.     character [0] : E.ULONG )
  359.   : BOOLEAN;
  360.   -102;
  361.  
  362. LIBCALL (base : LocaleBasePtr) IsGraph *
  363.   ( locale    [8] : LocalePtr;
  364.     character [0] : E.ULONG )
  365.   : BOOLEAN;
  366.   -108;
  367.  
  368. LIBCALL (base : LocaleBasePtr) IsLower *
  369.   ( locale    [8] : LocalePtr;
  370.     character [0] : E.ULONG )
  371.   : BOOLEAN;
  372.   -114;
  373.  
  374. LIBCALL (base : LocaleBasePtr) IsPrint *
  375.   ( locale    [8] : LocalePtr;
  376.     character [0] : E.ULONG )
  377.   : BOOLEAN;
  378.   -120;
  379.  
  380. LIBCALL (base : LocaleBasePtr) IsPunct *
  381.   ( locale    [8] : LocalePtr;
  382.     character [0] : E.ULONG )
  383.   : BOOLEAN;
  384.   -126;
  385.  
  386. LIBCALL (base : LocaleBasePtr) IsSpace *
  387.   ( locale    [8] : LocalePtr;
  388.     character [0] : E.ULONG )
  389.   : BOOLEAN;
  390.   -132;
  391.  
  392. LIBCALL (base : LocaleBasePtr) IsUpper *
  393.   ( locale    [8] : LocalePtr;
  394.     character [0] : E.ULONG )
  395.   : BOOLEAN;
  396.   -138;
  397.  
  398. LIBCALL (base : LocaleBasePtr) IsXDigit *
  399.   ( locale    [8] : LocalePtr;
  400.     character [0] : E.ULONG )
  401.   : BOOLEAN;
  402.   -144;
  403.  
  404. LIBCALL (base : LocaleBasePtr) OpenCatalogA *
  405.   ( locale [8] : LocalePtr;
  406.     name   [9] : ARRAY OF CHAR;
  407.     tags  [10] : ARRAY OF U.TagItem )
  408.   : CatalogPtr;
  409.   -150;
  410.  
  411. LIBCALL (base : LocaleBasePtr) OpenCatalog *
  412.   ( locale [8]  : LocalePtr;
  413.     name   [9]  : ARRAY OF CHAR;
  414.     tags  [10]..: U.Tag )
  415.   : CatalogPtr;
  416.   -150;
  417.  
  418. LIBCALL (base : LocaleBasePtr) OpenLocale *
  419.   ( name [8] : ARRAY OF CHAR )
  420.   : LocalePtr;
  421.   -156;
  422.  
  423. LIBCALL (base : LocaleBasePtr) ParseDate *
  424.   ( locale       [8] : LocalePtr;
  425.     VAR date     [9] : D.Date;
  426.     fmtTemplate [10] : ARRAY OF CHAR;
  427.     getCharFunc [11] : U.HookPtr )
  428.   : BOOLEAN;
  429.   -162;
  430.  
  431. LIBCALL (base : LocaleBasePtr) StrConvert *
  432.   ( locale     [8] : LocalePtr;
  433.     string     [9] : ARRAY OF CHAR;
  434.     buffer    [10] : E.APTR;
  435.     bufferSize [0] : E.ULONG;
  436.     type       [1] : E.ULONG )
  437.   : E.ULONG;
  438.   -174;
  439.  
  440. LIBCALL (base : LocaleBasePtr) StrnCmp *
  441.   ( locale   [8] : LocalePtr;
  442.     string1  [9] : ARRAY OF CHAR;
  443.     string2 [10] : ARRAY OF CHAR;
  444.     length   [0] : LONGINT;
  445.     type     [1] : E.ULONG )
  446.   : LONGINT;
  447.   -180;
  448.  
  449. (*-- Library Base variable --------------------------------------------*)
  450.  
  451. (*-----------------------------------*)
  452. PROCEDURE* CloseLib ();
  453.  
  454. BEGIN (* CloseLib *)
  455.   IF base # NIL THEN E.base.CloseLibrary (base) END
  456. END CloseLib;
  457.  
  458. (*-----------------------------------*)
  459. PROCEDURE OpenLib * (mustOpen : BOOLEAN);
  460.  
  461. BEGIN (* OpenLib *)
  462.   IF base = NIL THEN
  463.     base :=
  464.       SYS.VAL (
  465.         LocaleBasePtr,
  466.         E.base.OpenLibrary (name, E.libraryMinimum));
  467.     IF base # NIL THEN SYS.SETCLEANUP (CloseLib)
  468.     ELSIF mustOpen THEN HALT (100)
  469.     END;
  470.   END;
  471. END OpenLib;
  472.  
  473. BEGIN
  474.   base := NIL
  475. END Locale.
  476.